double bi_sqrt(double);
double magic_sqrt(double);

double calc_dfabs(double);

// 测试代码
int main()
{
	@@ -51,7 +53,8 @@ double nt_sqrt(double x)
	/* 初值 */
	double r = (x + 1.0) / 2.0;

	while((r * r - x) > EPSILON || (x - r * r) > EPSILON)
	/* while((r * r - x) > EPSILON || (x - r * r) > EPSILON) */
	while(calc_dfabs(r * r -x)> EPSILON)
	{
		r = (r + x / r) / 2.0;
	}
	@@ -83,7 +86,8 @@ double bi_sqrt(double x)
	double x2 = x;
	double r = (x1 + x2) / 2.0;

	while((r * r - x) > EPSILON || (x - r * r) > EPSILON)
	/* while((r * r - x) > EPSILON || (x - r * r) > EPSILON) */
	while(calc_dfabs(r * r -x)> EPSILON)
	{
		if((r * r - x) > 0.0)
		{

	return (double)r;
}

/*
 将double型看成2个整数(int, 4个字节)
 然后通过强制指针转换为int *，然后+1偏移后得到高4个字节
 再通过与运算实现最高位的置0运算，
 也就是让符号位为0，从而实现double型数据的求绝对值
*/
double calc_dfabs(double x)
{
	*(((int *)&x) + 1) &= 0x7FFFFFFF;
	return x;
}
